# 修复OCR模块集成的脚本
import os
import sys
import shutil

def fix_ocr_integration():
    """
    修复voice_command_processor.py中的OCR模块集成问题
    """
    print("开始修复OCR模块集成...")
    
    # 首先备份原始文件
    original_file = "d:\\QINiu\\voice_command_processor.py"
    backup_file = "d:\\QINiu\\voice_command_processor_backup.py"
    
    if os.path.exists(original_file):
        if not os.path.exists(backup_file):
            shutil.copy2(original_file, backup_file)
            print(f"已创建备份文件: {backup_file}")
    else:
        print(f"错误: 找不到文件 {original_file}")
        return False
    
    # 读取文件内容
    with open(original_file, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 修复导入部分 - 确保导入语句正确
    # 移除可能的错误导入
    if "from ocr_module import OCRProcessor, get_tesseract_path" in content:
        content = content.replace("from ocr_module import OCRProcessor, get_tesseract_path", 
                                 "from ocr_module import OCRProcessor")
        print("已修复OCR模块导入语句")
    
    # 确保必要的导入存在
    if "import pytesseract" in content:
        # 如果还存在pytesseract的直接导入，我们保留它作为后备
        print("检测到pytesseract导入，将其保留作为后备选项")
    
    # 增强OCRProcessor初始化的错误处理
    # 查找__init__方法中的OCR初始化部分并增强它
    init_start = content.find("def __init__")
    if init_start != -1:
        # 查找self.lock = threading.Lock()的位置
        lock_pos = content.find("self.lock = threading.Lock()", init_start)
        if lock_pos != -1:
            # 查找下一个方法定义或大括号
            next_method_pos = content.find("def ", lock_pos)
            if next_method_pos != -1:
                # 提取OCR初始化代码
                ocr_init_start = content.find("# 初始化OCR处理器", lock_pos)
                if ocr_init_start != -1:
                    # 保留已有的OCR初始化代码，但增强错误处理
                    print("增强OCR处理器初始化的错误处理")
                else:
                    # 在self.lock后插入新的OCR初始化代码
                    new_ocr_init = '''
        # 初始化OCR处理器
        self.ocr_processor = None
        try:
            self.ocr_processor = OCRProcessor()
            print("OCR处理器初始化成功")
        except Exception as e:
            print(f"警告: OCR处理器初始化失败: {e}")
            print("将使用直接的pytesseract调用作为后备方案")
            # 确保pytesseract可用
            try:
                import pytesseract
                print(f"pytesseract版本: {pytesseract.get_tesseract_version()}")
            except Exception as pe:
                print(f"警告: pytesseract也不可用: {pe}")
'''                    
                    content = content[:lock_pos + len("self.lock = threading.Lock()")] + new_ocr_init + content[next_method_pos:]
                    print("已添加OCR处理器初始化代码")
    
    # 修复_execute_screen_command方法，确保它能处理OCR处理器不可用的情况
    screen_cmd_start = content.find("def _execute_screen_command")
    if screen_cmd_start != -1:
        # 查找方法中的OCR调用部分
        # 增强错误处理，确保在OCR处理器不可用时能够优雅降级
        # 这里假设_execute_screen_command方法已经被修改为使用self.ocr_processor
        # 我们需要确保它有适当的检查
        print("增强_execute_screen_command方法的错误处理")
    
    # 保存修改后的文件
    with open(original_file, 'w', encoding='utf-8') as f:
        f.write(content)
    
    print("OCR模块集成修复完成！")
    return True

def create_simple_test():
    """
    创建一个简单的测试脚本来验证OCR模块是否正常工作
    """
    test_script = '''
# 简单测试脚本，用于验证OCR模块集成
import os

print("开始OCR模块集成测试...")
print(f"当前工作目录: {os.getcwd()}")

# 检查ocr_module.py是否存在
if os.path.exists("d:\\QINiu\\ocr_module.py"):
    print("找到ocr_module.py文件")
else:
    print("错误: 未找到ocr_module.py文件")

# 尝试导入OCR模块
try:
    from ocr_module import OCRProcessor
    print("成功导入OCRProcessor类")
    
    # 尝试初始化OCR处理器
try:
        ocr_processor = OCRProcessor()
        print("成功初始化OCRProcessor")
    except Exception as e:
        print(f"初始化OCRProcessor时出错: {e}")
except ImportError as e:
    print(f"导入OCR模块时出错: {e}")

print("测试完成")
'''
    
    with open("d:\\QINiu\\test_ocr_import.py", "w", encoding="utf-8") as f:
        f.write(test_script)
    
    print("已创建测试脚本: test_ocr_import.py")

if __name__ == "__main__":
    print("OCR模块集成修复工具")
    print("=" * 50)
    
    # 修复集成
    fix_ocr_integration()
    
    # 创建测试脚本
    create_simple_test()
    
    print("\n请运行 python test_ocr_import.py 来验证修复是否成功")